package cn.wit.luohui.day13;

import java.beans.EventHandler;
import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.input.KeyCode;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class ClientFx extends  Application{
private Socket socket;
private DataOutputStream os;

	@Override
	public void start(Stage primaryStage) throws Exception {
		VBox box=new VBox(10);
		box.setPadding(new Insets(10));
		
		//多行输入框
		TextArea ta=new TextArea();
		VBox.setVgrow(ta, Priority.ALWAYS);
		
		//单行输入
		TextField tf=new TextField();
		box.getChildren().addAll(ta,tf);
		
		//监听回车事件
//		tf.setOnKeyPressed(new EventHandler<KeyEvent>()){
//			
//		}
		//lambda表达式
		tf.setOnKeyPressed((event)->{
			KeyCode code=event.getCode();
			if(code==KeyCode.ENTER) {
				String message=tf.getText();
				if("".equals(message)) {
					return;
				}
				ta.appendText(message+"/n");
				tf.setText("");
				
				if("88".equals(message)) {
					//客户端结束的逻辑处理
					Utils.closeQuietly(os);	//Utils是我们自己写的工具类
					Utils.closeQuietly(socket);
					//退出状态，括号里的是参数，进程结束的返回值，非0表异常终止
					System.exit(0);
				}
				
				try {
				os.writeUTF(message);
				//这时候如果你调用了 close()方法关闭了读写流，
				//那么这部分数据就会丢失，所以应该在关闭读写流之前先flush()，先清空数据。
				os.flush();
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
		});
	
		Scene scene=new Scene(box,500,300);
		primaryStage.setScene(scene);
		primaryStage.show();
		
		openSocket();
}

	private void openSocket() {

		//host:主机 port:端口
		try {
		socket=new Socket("127.0.0.1",6666);
		os = new DataOutputStream(new BufferedOutputStream(socket.getOutputStream()));
		System.out.println("和服务器已经连上了。。。。");
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}
	
